﻿using System;
using System.Threading;


namespace Lösungen
{
    internal delegate void TankfüllstandBeobachter(PKW pkw);

    internal enum TankfüllstandLeuchte
    {
        GRÜN, GELB, ROT
    };

    
    internal class PKW
    {
        public TankfüllstandLeuchte TankfüllstandLeuchte { get; set; } = TankfüllstandLeuchte.ROT;

        public event TankfüllstandBeobachter? TankfüllstandEvent;

        private int tankfüllstand;
        private void SetTankfüllstand(int wert)
        {
            tankfüllstand = wert;
            if (tankfüllstand >= 15)
                TankfüllstandLeuchte = TankfüllstandLeuchte.GRÜN;
            else if (tankfüllstand >= 10)
                TankfüllstandLeuchte = TankfüllstandLeuchte.GELB;
            else
                TankfüllstandLeuchte = TankfüllstandLeuchte.ROT;
        }

        public void AddTankfüllstand(int menge)
        {
            SetTankfüllstand(tankfüllstand + menge);            
        }

        public PKW(int tankfüllstand)
        {
            SetTankfüllstand(tankfüllstand);
        }

        public void Fahren()
        {
            while (tankfüllstand > 0)
            {
                Console.WriteLine("Brumm...");
                SetTankfüllstand(tankfüllstand - 1);
                if (TankfüllstandLeuchte == TankfüllstandLeuchte.GELB || TankfüllstandLeuchte == TankfüllstandLeuchte.ROT)
                    TankfüllstandEvent?.Invoke(this);

                Thread.Sleep(500);
            }
        }
    }
}
